package com.bigdata.spark.core.spark

import org.apache.spark.sql.SparkSession

/**
 * @author Gerry chan
 * @version 1.0
 * 2021/01/16
 * spark + hive 结合使用
 */
object Spark_Hive {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .master("local[*]")
      .appName("onHive")
      .config("hive.metastore.uris","thrift://node1:9083")
      .enableHiveSupport()
      .getOrCreate()

    //直接通过表名读取hive数据
    val df_table = spark.table("warehouse.t_orders")

    spark.sql("show databases").show

    //spark默认连接hive的Default库
    val df = spark.sql("select * from test")
    val ds = df.where(df("total").startsWith("111"))
    df.show

    //关于分桶写入
    //分桶写入就是将数据按照指定的列和桶数进行散列，目前分桶写入只支持保存为表，实际上这就是 Hive 的分桶表。
    val numberBuckets = 10
    val columnToBucketBy = "deptno"

    df.write.format("parquet")
      .mode("overwrite")
      .bucketBy(numberBuckets, columnToBucketBy)
      .saveAsTable("bucketedFiles")

    spark.stop()
  }

}
